
void print(int a[],int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");

}
int inc(const void*a,const void*b){
    return *(int*)a-*(int*)b;
}
int dec(const void*a,const void*b)
{
    return *(int*)b-*(int*)a;
}

int hash(int n)
{
    int s=0;
    while(n>0)s+=n%10,n/=10;
    return s;
}
int user(const void *a,const void*b)
{
    int flag= hash(*(int*)a)-hash(*(int*)b);
    if(flag!=0)
        return flag;
    return *(int*)a-*(int*)b;
}
int main()
{
    int a[]= {12,3,123,1,23,12,3,21,3,213,213,9,};
    int n=sizeof(a)/sizeof(a[0]);
    qsort(a,n,sizeof(a[0]),inc);
    print(a,n);
    qsort(a,n,sizeof(a[0]),dec);
    print(a,n);
    qsort(a,n,sizeof(a[0]),user);
    print(a,n);

}
